package main

import (
	"fmt"
	"reflect"
	"strconv"
	"strings"
	"time"
	"unicode/utf8"
)

func main() {
	now := time.Now()

	fmt.Printf("年：%v \n", now.Year())

	atoi, err := strconv.Atoi("sd")
	fmt.Println(atoi, err)

	name := "balala A小魔仙"

	fmt.Println(len(name))                    // 字节数组长度
	fmt.Println(utf8.RuneCountInString(name)) // 字符串长度

	fmt.Println(strings.HasPrefix(name, "ba")) // 是否以xx开头
	fmt.Println(strings.HasSuffix(name, "仙"))  // 是否以xx结尾

	fmt.Println(strings.Contains(name, "仙")) // 是包含xx结尾

	fmt.Println(strings.ToUpper(name)) // 转大写

	fmt.Println(strings.ToLower(name)) // 转小写

	fmt.Println("1----------------------------------------")
	fmt.Println(strings.TrimLeft(name, "ba")) // 去除左边xx
	fmt.Println(strings.TrimRight(name, "仙")) //去除右边xx
	fmt.Println(strings.Trim(name, "b 仙"))    //去除两边

	fmt.Println("2----------------------------------------")

	fmt.Println(strings.Replace(name, "la", "ce", 1)) // 从左往右找到第一个la 替换为ce
	fmt.Println("原字符串=", name)

	fmt.Println(strings.Replace(name, "la", "ce", 2)) // 从左往右找到前两个la 替换为ce

	fmt.Println(strings.Replace(name, "la", "LA", -1)) // 替换所有

	fmt.Println(strings.ReplaceAll(name, "la", "LA")) //替换所有

	data := "拿老子的,意大利跑来"
	fmt.Println(strings.Split(data, ",")) //分割

	fmt.Println("3----------------------------------------")

	// 拼接字符串
	message := "我爱" + "北京天安门" //效率低不建议使用
	fmt.Println(message)

	dataList := []string{"我爱", "北京天安门"} // 建议 效率高些
	fmt.Println(strings.Join(dataList, "-"))

	// 推荐使用
	s := strings.Builder{}
	s.WriteString("as")
	fmt.Println(s.String())

	var builder strings.Builder
	builder.WriteString("我爱")
	builder.WriteString("-")
	builder.WriteString("北京天安门")
	fmt.Println(builder.String())

	fmt.Println("3----------------------------------------")
	// sting 转 int

	code := "5647"

	fmt.Println(strconv.Atoi(code))
	fmt.Println(strconv.ParseInt(code, 10, 0))

	// int 转 sting
	num := 6633
	fmt.Println(strconv.Itoa(num), reflect.TypeOf(strconv.Itoa(num)))

	fmt.Println(strconv.FormatInt(int64(num), 2))

	// 转换为 字节集合
	bytes := []byte(name)
	fmt.Println(bytes)
	//字节集合  转换为 字符串
	byteList := []byte{98, 97, 108, 97, 108, 97, 32, 65, 229, 176, 143, 233, 173, 148, 228, 187, 153}
	fmt.Println(string(byteList))
	runes := []rune(name)
	fmt.Println(runes)

	// 循环所有字符
	for index, item := range name {
		fmt.Println(index, item, string(item))
	}

}
